#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
int main()
{
//    pid_t id = fork();
//    if(id<0)
//    {
//        printf("进程创建失败！\n");
//        return 1;
//    }
//    else if (id==0)
//    {
//        int i=5;
//        while(i>0)
//        {
//            printf("%d:i am child,pid:%d ppid%d\n",i,getpid(),getppid());
//            sleep(1);
//            i--;
//        }
//       printf("子进程退出\n");
//       exit(10);
//    }
//    else{
//        int j=7;
//        while(j>0)
//        {
//
//            printf("i am father , pid:%d,ppid:%d\n",getpid(),getppid());
//            sleep(1);
//            j--;
//        }
//        printf("父进程回收子进程\n");
//        pid_t ret = wait(NULL);
//        
//            printf("i am father , pid:%d,ppid:%d\n",getpid(),getppid());
//sleep(1);
//    }

//    while(1)
//    {
//        pid_t id=fork();
//        if (id<0)
//        {
//            printf("进程创建失败！\n");
//        }
//        else 
//        {    
//            printf("pid:%d,ppid:%d\n");
//        }
//        sleep(1);
//  }
    pid_t id =fork();
    if(id<0)
    {
        printf("进程创建失败！\n");
        return 1;
    }
    else if (id==0)
    {
        printf("i am child process!\n");
        int cnt=5;
        while(cnt>0)
        {
        printf("child , %d,pid: %d,ppid: %d\n",cnt,getpid(),getppid());
        cnt--;
        sleep(1);
        }
        exit(105);
    }
    else{
        int status=0;
        printf("i am father process!,wait the child\n");
        pid_t i= waitpid(id,&status,0);
        printf("father,pid:%d,ppid:%d\n",getpid(),getppid());
        printf("退出码:%d,退出信号:%d,coredump:%d\n",(status>>8)&0xFF,status&0x7F,status&0x80);
        printf("等待结束！\n");

    }

    return 0;
}
